import ITool from '../ITool';

/**
 * 基础工具箱
 * @implements {ITool}
 */
class BaseMapTool extends ITool {
  constructor(_top, _impl) {
    super(_top, _impl);
    this.name = 'BaseMapTool';
    this.desc = '基础工具箱';
  }

  onAdd() {
    super.onAdd();
  }

  onRemove() {
    super.onRemove();
  }

  /**
   * 获取缩放等级
   */
  getZoom() {
    return this.getMap().getZoom();
  }

  /**
   * 获取中心点坐标
   */
  getCenter() {
    var center = this.getMap().getCenter();
    return [center.lng, center.lat];
  }

  /**
   * 定位地图到设定的地理范围
   * @param {Array} bounds 范围 [lng1, lat1, lng2, lat2]
   * @param {Object} options 动画属性
   * @param {Object} eventData 额外属性
   */
  fitBounds(bounds, options, eventData) {
    // this.log(bounds);
    let min = [bounds[0], bounds[1]];
    let max = [bounds[2], bounds[3]];
    let bbox = [min, max];
    // this.log(bbox);
    this.getMap().fitBounds(bbox, options, eventData);
  }

  /**
   * 获取当前地图范围
   */
  getBounds() {
    var extent = this.getMap().getBounds();
    return extent.toArray().flat();
  }

  /**
   * 定位地图中心点
   * @param {Array} center 中心点 [lng,lat]
   */
  centerAt(center) {
    this.getMap().setCenter(center);
  }

  /**
   * 平移至坐标点
   * @param {Array} point 坐标点 [lng,lat]
   */
  panTo(point) {
    this.getMap().panTo(point);
  }

  /**
   * 平移-左移
   */
  panLeft() {
    this.getMap().panBy([-100, 0]);
  }

  /**
   * 平移-右移
   */
  panRight() {
    this.getMap().panBy([100, 0]);
  }

  /**
   * 平移-上移
   */
  panUp() {
    this.getMap().panBy([0, -100]);
  }

  /**
   * 平移-下移
   */
  panDown() {
    this.getMap().panBy([0, 100]);
  }

  /**
   * 缩放-放大
   */
  zoomIn() {
    this.getMap().zoomIn();
  }

  /**
   * 缩放-缩小
   */
  zoomOut() {
    this.getMap().zoomOut();
  }

  /**
   * 设置地图缩放等级
   * @param {Number} zoom
   */
  setZoom(zoom) {
    this.getMap().setZoom(zoom);
  }

  /**
   * 设置地图样式-默认底图
   */
  setDefaultStyle() {
    this.getUtil('StyleSwitchUtil').switchBasic();
  }

  /**
   * 设置地图样式-亮色底图
   */
  setLightStyle() {
    this.getUtil('StyleSwitchUtil').switchLight();
  }

  /**
   * 设置地图样式-深色底图
   */
  setDarkStyle() {
    this.getUtil('StyleSwitchUtil').switchDark();
  }

  /**
   * 设置地图样式-卫星底图
   */
  setSatelliteStyle() {
    this.getUtil('StyleSwitchUtil').switchSatellite();
  }
}

export default BaseMapTool;
